package niuke_nowcoder;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class NowRemove_1 {
    public static void main(String[] args) {
        int[] ints = {9, 1, 2, 7, 2, 1, 6, 0, 1, 8};
        long total = minimumValueAfterDispel(ints);
        System.out.println(total);
    }

    /**
     * 返回两次操作后，数组元素之和的最小值
     *
     * @param nums int整型一维数组 这你你需要操作的数组
     * @return long长整型
     */
    public static long minimumValueAfterDispel(int[] nums) {
        // write code here
        //第一遍
        Arrays.sort(nums);
        int length = nums.length;
        int x = nums[length / 2];
        int[] nums1=new int[length];
        for (int i = 0; i < length; i++) {
            if (nums[i]>=x){
                nums1[i]=nums[i]-x;
            }else {
                nums1[i]=nums[i];
            }
        }
        //第二遍
        Arrays.sort(nums1);
        int x1 = nums1[length / 2];
        int[] nums2=new int[length];
        for (int i = 0; i < length; i++) {
            if (nums1[i]>=x1){
                nums2[i]=nums1[i]-x1;
            }else {
                nums2[i]=nums1[i];
            }
        }
        //求和
        long total = 0;
        for (int i : nums2
        ) {
            total += i;
        }

        return total;
    }
}
/**
 * 题目描述
 * 题目背景：
 * <p>
 * “曾经有两次消除的机会摆在我面前，我却没有珍惜……”牛牛回忆道。
 * <p>
 * 牛牛正在玩一款全新的消消乐游戏。这款游戏的主体是由一列列的方块构成，牛牛的目标就是要尽量消除这些方块。
 * <p>
 * 每次操作，牛牛可以选择某个高度 x，将所有高度大于等于 x 的那些列全部消除 x 个方块，随后方块会下落，以填补消除造成的空白。
 * <p>
 * 牛牛这一局的发挥极佳，眼看就要破纪录了，却发现自己只剩下了两次消除机会。
 * <p>
 * 为了不错失这千载难逢的机会，他决定写个程序来算出最优解。
 * <p>
 * <p>
 * 简明题意：
 * <p>
 * 给定一个数组 nums，其中有 n 个非负整数。你的目的是进行两次操作，使得数组的元素之和最小。
 * 每次操作形如：任选一个整数 x ，将数组中所有大于等于 x 的数减去 x 。
 * <p>
 * 示例1
 * 输入
 * 复制
 * [2, 1, 3]
 * 输出
 * 复制
 * 0
 * 说明
 * 初始数组为 [2, 1, 3]。
 * 先选择 x = 2，则所有大于等于 2 的元素减去 2 ，变成 [0, 1, 1]。
 * 再选择 x = 1，则所有大于等于 1 的元素减去 1 ，变成 [0, 0, 0]。
 * 所以数组元素之和的最小值为 0。
 * 备注:
 * 对于所有的测试数据，保证有1\leq n \leq 30001≤n≤3000 且 0\leq num_i \leq 2^{31}-10≤num
 * i
 * ​
 * ≤2
 * 31
 * −1 。
 */